package com.authine.cloudpivot.web.api;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;

import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintException;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.attribute.DocAttributeSet;
import javax.print.attribute.HashDocAttributeSet;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.MediaSizeName;
import javax.swing.JOptionPane;
/**
 * java定位打印，把打印内容打到指定的地方
 * @author edz
 *
 */
public class throwadv implements Printable {
    private int PAGES=0;
    private String printStr;
    /*
     * Graphics指明打印的图形环境；PageFormat指明打印格式（页面大小以点为计量单位；page指明页号
     */
    public int print(Graphics gp,PageFormat pf,int page) throws PrinterException{
        Graphics2D g2=(Graphics2D)gp;
        g2.setPaint(Color.black);
        if(page>=PAGES){//当打印页号大于需要打印的总页数，打印工作工作结束
            return Printable.NO_SUCH_PAGE;
        }
        g2.translate(pf.getImageableX(), pf.getImageableY());//转化坐标，确定打印边界
        Font font=new Font("宋体",Font.PLAIN,24);
        g2.setFont(font);
        //打印当前页面
        int printFontCount=printStr.length();//打印字数
        int printFontSize=font.getSize();//font的磅值大小
        float printX=595/2;//给定字符点阵，X页面正中
        float printY=843/2;//给定字符点针，Y页面正中
        float printMX=printX-(printFontCount*printFontSize/2);//打印到正中间
        float printMY=printY-printFontSize/2;//打印到正中间
        g2.drawString(printStr, printMX, printMY);//具体打印每一行文本,在指定位置
        g2.drawString(printStr, printMX-printFontSize*printFontCount, printMY+printFontSize);//具体到打印每一行文本
        g2.drawString(printStr, printMY, printMY+printFontSize*2);
        g2.drawString(printStr, printMY, printMY+printFontSize*2);
        g2.drawString(printStr, printMX, printMY+printFontSize*2);
        return Printable.PAGE_EXISTS;//存在打印页时，继续打印工作
    }
    //打印内容到指定位置
    public void printContent(){
        printStr="打印测试内容";//获取需要打印的目标文本
        if(printStr!=null&&printStr.length()>0){//当打印内容不为空时
            PAGES=1;//获取打印总页数
            //指定打印输出格式
            DocFlavor flavor=DocFlavor.SERVICE_FORMATTED.PRINTABLE;
            //设置打印属性
            PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
            //设置纸张大小，也可以新建MediaSize类来自定义大小
            pras.add(MediaSizeName.ISO_A4);
            DocAttributeSet das=new HashDocAttributeSet();
            //指定打印内容
            Doc doc=new SimpleDoc(this,flavor,das);
            //定位默认的打印服务
            PrintService printService=null;
            printService=PrintServiceLookup.lookupPrintServices(flavor, pras)[0];
            System.out.println(printService);
            //创建打印作业
            DocPrintJob job=printService.createPrintJob();
            try{
                job.print(doc, pras);//进行每一页的具体打印操作
            }catch(PrintException pe){
                pe.printStackTrace();
            }
        }
        else{
            //如果打印内容为空时，提示用户打印将取消
            JOptionPane.showConfirmDialog(null, "Sorry,Printer Job is Empty,Print Cancelled!","Empty",JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE);

        }
    }
    /*public static void main(String[]args){
        throwadv ip=new throwadv();
        ip.printContent();
    }*/

}